package com.dbf.forum.controller.produit;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.dbf.forum.Constants;
import com.dbf.forum.core.produit.Produit;
import com.dbf.forum.core.produit.ProduitDto;
import com.dbf.forum.model.ResponseMessage;
import com.dbf.forum.service.produit.ProduitService;

@RestController
@RequestMapping(value = Constants.URI_API + Constants.URI_PRODUITS)
public class ProduitController {

	private static final Logger log = LoggerFactory
            .getLogger(ProduitController.class);
	String message = "Welcome to Spring MVC!";
	
	@Inject
	ProduitService produitService;
	 
//	@RequestMapping("/hello")
//	public ModelAndView showMessage(
//			@RequestParam(value = "name", required = false, defaultValue = "World") String name) {
//		System.out.println("in controller");
// 
//		ModelAndView mv = new ModelAndView("showMessage");
//		mv.addObject("message", message);
//		mv.addObject("name", name);
//		return mv;
//	}
	
	@RequestMapping(value = "", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<Page<ProduitDto>> getAllProduits(
            @RequestParam(value="q", required = false) String keyword, //
            @PageableDefault(page = 0, size = 10, sort = "nom", direction = Direction.DESC) Pageable page) {
        if (log.isDebugEnabled()) {
            log.debug("get all posts of q@" + keyword + ", page@" + page);
        }

        Page<ProduitDto> produits = produitService.getAllProduits(page);

        if (log.isDebugEnabled()) {
            log.debug("get posts size @" + produits.getTotalElements());
        }

        return new ResponseEntity<>(produits, HttpStatus.OK);
    }
	
    @RequestMapping(value = "", method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<ResponseMessage> saveUser(@RequestBody ProduitDto form) {
        if (log.isDebugEnabled()) {
            log.debug("save user data @" + form);
        }
        Produit produit = new Produit();
        produit.setNom(form.getNom());
        produit.setPrixDepart(form.getPrixDepart());
        produit.setDescription(form.getDescription());
        produitService.saveEntity(produit);

        return new ResponseEntity<>(HttpStatus.CREATED);
    }
}
